import request from "@/utils/request"

export const loginApi = (username, password) => {
    return request({
        url: '/auth/web/login',
        method: 'post',
        data: {
            username,
            password
        }
    })
}

export const logoutApi = () => {
    return request.post('/auth/web/logout')
}

export const wechatLoginApi = (code) => {
    return request.post('/auth/wechat/login?code=' + code)
}

export const getUserInfoApi = () => {
    return request.get('/user/')
}

/**
 * 获取角色
 * @param {Object} params
 * @param {Number} params.username 用户username （必填,不填返回所有角色组）
 * @returns 
 */
export const getRoleApi = (params) => {
    return request.get('/npermission/role/', {
        params: params
    })
}

/**
 * 添加角色组
 * @param {Object} params
 * @param {String} params.role_name 角色组名称 （必填）
 * @param {Number} params.company_id 公司id （必填）
 * @param {String} params.username 用户username 
 * @returns 
 */
export const addRoleApi = (data) => {
    return request.post('/npermission/role/', data)
}

/**
 * 更新角色组
 * @param {Object} params
 * @param {String} params.role_name 角色组名称 （必填）
 * @param {Number} params.company_id 公司id （必填）
 * @param {String} params.username 用户username 
 * @returns 
 */
export const updateRoleApi = (data) => {
    return request.patch('/npermission/role/', data)
}

/**
 * 删除角色组
 * @param {Object} params
 * @param {String} params.role_name 角色组名称 （必填）
 * @param {Number} params.company_id 公司id （必填）
 * @param {String} params.user_name 用户username 
 * @returns 
 */
export const deleteRoleApi = (data) => {
    return request.delete('/npermission/role/', {
        data
    })
}

/**
 * 
 * @param {Object} params 查询参数
 * @param {Number} params.id 用户id （必填）
 * @returns 
 */
export const getPermissionApi = (params) => {
    return request.get('/permission/', {
        params: params
    })
}

/**
 * 修改权限
 * @param {Object} data 权限数据
 * @param {Number} data.user_id 权限id
 * @param {Array} data.permissions 权限数组
 */
export const updatePermissionApi = (data) => {
    return request.patch('/permission/', data)
}

// 刷新token的Promise缓存
let refreshPromise = null;

export async function refreshTokenApi() {
    // 如果正在刷新，返回同一个Promise
    if (refreshPromise) {
        return refreshPromise;
    }

    refreshPromise = new Promise(async (resolve, reject) => {
        try {
            const refreshToken = localStorage.getItem('refresh_token');

            if (!refreshToken) {
                throw new Error('没有找到refresh token');
            }

            const res = await request({
                url: '/auth/refresh',
                method: 'POST',
                headers: {
                    'Authorization': `Bearer ${refreshToken}`
                },
                _isRefreshToken: true,
                timeout: 10000
            });

            resolve(res);
        } catch (error) {
            console.error('Token刷新失败:', error);
            // 清除所有token
            localStorage.removeItem('token');
            localStorage.removeItem('refresh_token');
            reject({
                code: 401,
                message: '登录已过期，请重新登录'
            });
        }
    });

    // 无论成功还是失败，都要清除Promise缓存
    refreshPromise.finally(() => {
        refreshPromise = null;
    });

    return refreshPromise;
}

export function isRefreshToken(config) {
    return !!config['_isRefreshToken'];
}